Data sequences that arise from measurements are often random in that there are no known functions for generating the sequences. However, such sequences typically have measurable statistical characteristics such as a frequency or number of repetitions of a particular substring or subsequence. A conventional random number generator that generates random numbers that are uniformly distributed over a target range generally fails to provide a sequence that reproduces the statistical characteristics of the original sequence. Still, the ability to generate a simulated sequence having the same statistical characteristics as an original sequence is often desirable.
One situation where simulated sequences are particularly useful arises when data of a specific kind is necessary for computations, but not enough of the data is available. For example, measurements on a communication channel can generate a data sequence representing error events in the communications channel, and the measured data sequence can be used to test an error correction system designed for the channel. However, full testing of the error correction system may require more error data than is available from the actual measurements. A simulated data sequence can then be used to complete the system evaluation. Simulated data sequences may also be useful or required in testing of predictive systems such as financial forecasting models or weather forecasting models or in testing of data processing systems such as compression software, particularly when testing is for very long periods of time (e.g., weeks of CPU time). In these applications, the simulated data should have the same characteristics as the actual data in order to provide accurate tests.
Computer graphics is another area where simulated sequences are useful. In particular, computer graphics often use textures that add color variations to objects in generated images and therefore make the objects appear more realistic. Such textures can be created using samples from images of real objects and are random but with specific visual characteristics.
FIG. 1A illustrates an example of a binary texture 100, which corresponds to an array of pixels that have either a first color or a second color (e.g., black or white) depending on a corresponding binary value 0 or 1 for the pixel. An ordering rule for the pixel values corresponding to binary texture 100 (e.g., ordering the pixel values in typewriter or zigzag fashion across the entire array of pixel values) can rearrange the array of pixel values corresponding to texture 100 into a one-dimensional sequence. In a generated image, binary texture 100 can cover a region that fits within the boundaries of array of pixel values, or multiple copies of texture 100 can be fit together like tiles to cover a larger region. However, tiling processes may be undesirable when the visual characteristics at the boundaries of the tiles visibly differ from the other portions of texture 100 or when repeated tiles create a visually noticeable repetition in an otherwise random pattern. It is desirable to be able to create a random texture of arbitrary size that maintains the visible characteristics of the original texture 100. A simulated sequence having the same statistical properties as the sequence derived from the original texture 100 would ideally produce a simulated texture that is visibly similar to the original texture 100.